#ifndef BE_MATERIAL_H_INCLUDED
#define BE_MATERIAL_H_INCLUDED

#include "src/math/vector4f.h"

class BeMaterial
{
public:
	BeMaterial() :
	m_ambient(1,1,1,1),
	m_diffuse(1,1,1,1),
	m_specular(0,0,0,0),
	m_emission(0,0,0,0),
	m_shininess(0)
	{
	}

	BeMaterial(const BeMaterial& material) :
	m_ambient(material.m_ambient),
	m_diffuse(material.m_diffuse),
	m_specular(material.m_specular),
	m_emission(material.m_emission),
	m_shininess(material.m_shininess)
	{
	}
	
	void setAmbient(const Vector4f ambient) { m_ambient=ambient; }
	void setDiffuse(const Vector4f diffuse) { m_diffuse=diffuse; }
	void setSpecular(const Vector4f specular) { m_specular=specular; }
	void setEmission(const Vector4f emission) { m_emission=emission; }
	void setShininess(const float shininess) { m_shininess=shininess; }

	Vector4f& getAmbient() { return m_ambient; }
	Vector4f& getDiffuse() { return m_diffuse; }
	Vector4f& getSpecular() { return m_specular; }
	Vector4f& getEmission() { return m_emission; }
	float& getShininess() { return m_shininess; }
	float* getShininessPointer() { return &m_shininess; }

	const Vector4f& getAmbient() const { return m_ambient; }
	const Vector4f& getDiffuse() const { return m_diffuse; }
	const Vector4f& getSpecular() const { return m_specular; }
	const Vector4f& getEmission() const { return m_emission; }
	float getShininess() const { return m_shininess; }
	const float* getShininessPointer() const { return &m_shininess; }

private:
	Vector4f	m_ambient;
	Vector4f	m_diffuse;
	Vector4f	m_specular;
	Vector4f	m_emission;
	float		m_shininess;
};

#endif
